<html>
<body>
<h2>$rc.contextPath Hello World2!</h2>
</body>
<script>
    // (function () {
    //     var hello = "hello,world";
    //
    //     function welcome(hi) {
    //         alert(hi);        //解析到作用域链的第一个对象的属性
    //         alert(hello);    //解析到作用域链的第二个对象的属性
    //     }
    //
    //     welcome("It's easy");
    // })();

    // var foo = (function () {
    //
    //     var name = "1123";
    //     return {
    //         get_name: function () {
    //             return name;
    //         },
    //         set_name: function (new_name) {
    //             name = new_name;
    //         }
    //     }
    // })();
    // alert(foo.get_name());

    /**
     * 1. 外部不能直接访问foo函数中的属性name，但是可以通过foo函数中的get_name函数访问到foo中的属性值name
     * 2. 并且通过foo中的get_name直接返回foo中属性name，让外部获取到foo中的属性值。
     * 3. 那么get_name这个函数就是将函数内部和函数外部连接起来的桥梁，这种特性称之为闭包
     *
     * 上述也是闭包的一个重要特性那就是读取函数内部变量
     */

    var foo = (function () {
        var num = 2;
        return {
            addNum: function () {
                num += 1;
            },
            getNum: function () {
                return num;
            }
        }
    })();
    alert(foo.getNum()); // 2
    foo.addNum();
    alert(foo.getNum()); // 3
</script>
</html>
